package com.guaoran.interview.spring.aop.config;

/**
 * @author : 孤傲然
 * @description : Spring aop与aspectJ的区别
 * @date :2020/1/5 19:56
 */
public class AopAndAspectjReadme {
    // TODO Spring aop与aspectJ的区别
    // 织入的时期不同
    // spring aop采用的动态织入，而aspectJ是静态织入。

    // 静态织入：指在编译时期就织入，即：编译出来的class文件，字节码就已经被织入了。
    // 动态织入：分静动两种，静则指织入过程只在第一次调用时执行；动则指根据代码动态运行的中间状态来决定如何操作，每次调用target的时候都执行。


    // spring aop 是在运行时进性织入。 aop是对spring bean进行代理， 且只能对非static、非final 的方法进行代理，通过cglib或jdk
    // aspectj 是在编译前、编译后或加载class文件时进行织入。aspectj 可以对方法、字段、static、final方法进行织入。aspectj 因为是在运行前进行编译，因此在性能速度上比spring aop要高，要快。

    // TODO JDK 动态代理中，为什么是接口？
    // 因为在jdk动态代理生生成的代理类是默认继承了Proxy 类， 并实现了该接口。
    // 由于在Java中， 只能允许单继承多实现， 已经继承了 Proxy 类， 所以后面要代理的类必须是接口。



}
